﻿using Gentings.Tasks;

namespace Gentings.Extensions.Tagables
{
    /// <summary>
    /// 标签统计清理后台服务。
    /// </summary>
    /// <typeparam name="TTag">标签类型。</typeparam>
    /// <typeparam name="TTagIndex">标签索引类型。</typeparam>
    public abstract class TagTaskService<TTag, TTagIndex> : TaskService
        where TTag : TagBase, new()
        where TTagIndex : TagIndexBase, new()
    {
        private readonly ITagManager<TTag, TTagIndex> _tagManager;
        /// <summary>
        /// 初始化类<see cref="TagTaskService{TTag, TTagIndex}"/>。
        /// </summary>
        /// <param name="tagManager">标签管理接口。</param>
        protected TagTaskService(ITagManager<TTag, TTagIndex> tagManager)
        {
            _tagManager = tagManager;
        }

        /// <summary>
        /// 名称。
        /// </summary>
        public override string Name => $"{typeof(TTag).Name}标签后台服务";

        /// <summary>
        /// 描述。
        /// </summary>
        public override string Description => $"{typeof(TTag).Name}标签统计清理后台服务";

        /// <summary>
        /// 执行间隔时间。
        /// </summary>
        public override TaskInterval Interval => new TimeSpan(3, 0, 0);

        /// <summary>
        /// 执行方法。
        /// </summary>
        /// <param name="argument">参数。</param>
        public override async Task ExecuteAsync(Argument argument)
        {
            await _tagManager.ExecuteAsync();
        }
    }
}
